﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using System.Data.Objects.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Reporting.WebForms;
using SIBI.Helpers;
using SIBI.Reports;
using SIBI.Models;


namespace MvcReportViewer.Reports.ObsolescenciaBI
{
    public partial class Reporte : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ddlAntiguedad.SelectedIndex = 2;
                f_Reporte();

            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            f_Reporte();


        }

        // definir Estructura para el Reporte.


        private void f_Reporte()
        {
            // Obtener Parametros

            string lsclase = txtClase.Text.TrimEnd();
            string lslocalidad = txLocalidad.Text.TrimEnd();
            int lnano = ddlAntiguedad.SelectedIndex+1;
            string lsano = lnano.ToString();
            DateTime? fecha = DateTime.Now;

            //Crear Datasets que usa el Reporte
            ReportHelper.RepDataSet<string> tblReporte = new ReportHelper.RepDataSet<string>("Reporte", "repNombre");
            tblReporte.Rows.Add(new object[] { "Reporte de Obsolescencia Mensual" });
            // Llenar Datasets con Datos desde el Contexto o Contextos.


            using (SIBIContext db = new SIBIContext())
            {
                var bienes = db.BienInformaticoes;

                var buscar = (from tbien in db.BienInformaticoes
                              where (
                                (String.IsNullOrEmpty(lsclase) || tbien.nmym.ncob.cnom.Contains(lsclase)) &&
                                 (String.IsNullOrEmpty(lslocalidad) || tbien.nloc.localidad_nombre.Contains(lslocalidad))
                                )
                              orderby (tbien.dfva.Equals(null) ? 0 :
                                    ((SqlFunctions.DateDiff("yy", (DateTime?)tbien.dfva ?? fecha, fecha) > lnano) ? 3 : 2))
                              select new
                              {
                                  BienInformaticoId = tbien.BienInformaticoId,
                                  TipoBien_cnom = tbien.ntib.cnom,
                                  cmod = tbien.nmym.cmod,
                                  Marca_cnom = tbien.nmym.nmar.cnom,
                                  Estado_cnom = tbien.EstadoId,
                                  ceco_id = tbien.ncec.ceco_descripcion,
                                  localidad_nombre = tbien.nloc.localidad_nombre,
                                  dfva = tbien.dfva,
                                  ClaseObjeto_cnom = tbien.nmym.ncob.cnom,
                                  anos = SqlFunctions.DateDiff("yy",tbien.dfva , fecha),
                                  Serie = (tbien.dfva.Equals(null)) ? "No Aplica" :
                                    ((SqlFunctions.DateDiff("yy", (DateTime?)tbien.dfva ?? fecha, fecha) > lnano) ? 
                                    "Mayor que "+lsano+ " años" : "Hasta " + lsano + " años"),
                                  NroSerie = tbien.dfva.Equals(null) ? 0 :
                                    ((SqlFunctions.DateDiff("yy", (DateTime?)tbien.dfva ?? fecha, fecha) > lnano) ? 3 : 2),
                                    Obsolescencia = 1
                              }
                            );
                ReportViewer1.Reset();
                // Cargar el Reporte en pantalla, con sus parametros.
                ReportHelper.SetReportData(ReportViewer1, "/REP/REP_ObsMensual.rdl", "Reporte,Obsolescencia", new object[] { tblReporte, buscar.ToList() }
                    , "repNombre,anos", "Reporte de Obsolescencia Mensual", lnano);
            }

        }// f_Reporte()


    }
}
